#-*-coding:utf-8-*-
# 鸭子类型：调用相同的方法或者属性时，不一定
# 要求所有对象都是某个子类，只需要有对应的属性
# or 方法即可

class Person(object):

	Height = 50

	def __init__(self):
		self._name = ""
		print "get nothing"

	def run(self):
		print "human run "

	# 重载次方法可以让一个对象被调用
	def __call__(self, *args, **kwargs):
		print "call nothing"


class Plane(object):
	def __init__(self):
		print "get nothing"

	def run(self):
		print "plane run"

def somethingRun(obj):
	if obj:
		obj.run()

if __name__ == "__main__":
	p = Person()
	pl = Plane()
	somethingRun(p)
	somethingRun(pl)

	# dir 获取类的所有属性和方法
	# 传进去的参数可以是类或者对象
	methodList = dir(p)
	print methodList

	# 判断是否可以被调用
	print callable(p)